#include "ProcessPool.hpp"

int main()
{
    // 这个进程池有一个我们的代码导致的隐藏的比较深的bug
    // 问题出现在就是如果我们直接把close和wait合起来
    // 因为我们子进程的文件描述符表是继承父进程的，所以会把上一次父进程的写端也继承下来
    // 依次每个子进程的兄弟进程都会指向该子进程对应管道的写端
    // 会导致这个管道只是引用计数--了，并没有关闭这个管道，子进程n！=0就会一直阻塞
    // 然后我们自然就回收不了子进程了

    // 所以我们要解决这一问题的解决方案：
    // 从后向前关，先关闭最后的子进程对应管道的读端，再到前一个
    // 这样每一次的写端就只会是父进程一个进程在持有了

    // 定义ProcessPool对象
    ProcessPool pp(gdefaultnum);
    // 进程池一开始肯定是要先启动进程池，所以我们需要一个Start方法
    pp.Start();

    // 派发任务
    int code = 10;
    while (code--)
    {
        // 我们在ProcessPool进程池中需要一个给进程池提供任务的接口
        pp.Run();
        sleep(1);
    }

    // 进程池还得需要结束回收的方法
    pp.Stop();

    return 0;
}